import 'package:flutter/material.dart';

/**
 *  在flutter中，几乎所有的对象都是一个Widget 控件 组件都是widget
 *  Element是通过Widget生成，Widget树就是指UI空间树或UI渲染树
 *  一个Widget对象可以对应多个Element对象
 *
 *
 *  生命周期:
 *   initState: 当Widget第一次插入到Widget树时会被调用
 *              一次性的操作，如状态初始化，订阅子树的事件通知
 *    didChangeDependencies: 当State对象的以来发生变化时会被调用
 *    build:
 *    reassemble:为开发调试而提供的，在热重载之后提供
 *    didUpdateWidget: 重新构建
 *    deactivate: 当state对象总树中被移除时就会被调用
 *    dispose: 当state对象从树中被永久移除时调用；通常在此回调中释放资源
 * */

class Echo extends StatelessWidget{
  // 构造函数
  const Echo({
    Key key,
    @required this.text,
    this.backgroundColor: Colors.grey,
  }):super(key: key);

  final String text;
  final Color backgroundColor;

  @override
  Widget build(BuildContext context){
    return Scaffold(
      appBar: AppBar(
        title: Text('widget page'),
      ),
      body: new Center(
        child: new Column(
          mainAxisAlignment: MainAxisAlignment.center,
          children: <Widget>[
            new CounterWidget()
          ],
        ),
      )
    );
  }
}

class CounterWidget extends StatefulWidget {
  const CounterWidget({
    Key key,
    this.initValue: 0
  });

  final int initValue;

  @override
  _CounterWidgetState createState() => new _CounterWidgetState();
}

class _CounterWidgetState extends State<CounterWidget> {
  int _couter;

  @override
  void initState() {
    super.initState();
    _couter = widget.initValue;
    print('initState---------');
  }

  @override
  Widget build(BuildContext context) {
    // TODO: implement build
    return Center(
      child: FlatButton(
          onPressed: ()=>setState(()=>++_couter) ,
          color: Colors.yellow,
          child: Text('$_couter')
      ),
    ) ;
  }
  
  @override
  void didUpdateWidget(CounterWidget oldWidget) {
    super.didUpdateWidget(oldWidget);
    print('didUpdateWidget-------');
  }
  
  @override
  void deactivate() {
    super.deactivate();
    print('deactive----------');
  }

  @override
  void dispose() {
    super.dispose();
    print('dispose-------');
  }

  @override
  void reassemble() {
    super.reassemble();
    print('reassemble-------');
  }

  @override
  void didChangeDependencies() {
    super.didChangeDependencies();
    print('didChangeDependencies------');
  }
}